/*
-----------------------------------------------------------------------------
This source file is part of the
   ___                 __    __ _ _    _ 
  /___\__ _ _ __ ___  / / /\ \ (_) | _(_)
 //  // _` | '__/ _ \ \ \/  \/ / | |/ / |
/ \_// (_| | | |  __/  \  /\  /| |   <| |
\___/ \__, |_|  \___|   \/  \/ |_|_|\_\_|
      |___/                              
      Tutorial Framework
      http://www.ogre3d.org/tikiwiki/
-----------------------------------------------------------------------------
*/
#ifndef __GameApp_h_
#define __GameApp_h_
#include "Shapes.h"

class GameApp : public BaseApplication
{
public:
    GameApp(void);
    virtual ~GameApp(void);

protected:
    virtual void createScene(void);
	void virtual createFrameListener(void);
	virtual bool frameRenderingQueued(const Ogre::FrameEvent& evt);

	//OIS Keyboard
	virtual bool keyPressed(const OIS::KeyEvent& evt);
    virtual bool keyReleased(const OIS::KeyEvent& evt);

	//OIS Mouse
	virtual bool mouseMoved(const OIS::MouseEvent& evt);
    virtual bool mousePressed(const OIS::MouseEvent& evt, OIS::MouseButtonID id);
    virtual bool mouseReleased(const OIS::MouseEvent& evt, OIS::MouseButtonID id);

	int totalShapes;

	// entities
	Ogre::Entity* player;

	Ogre::Real mRotate;          // The rotate constant
    Ogre::Real mMove;            // The movement constant
	Ogre::Vector3 mDirection;    // Value to move in the correct direction

	// scene nodes
	Ogre::SceneNode* playerNode;
    Ogre::SceneNode* mCamNode;   // The SceneNode the camera is currently attached to


private:
	// Process input from Keyboard or mouse
	bool processInput(const Ogre::FrameEvent& evt);
};
#endif // #ifndef __TutorialApplication_h_
